package com.nondo.dean.saprfc.common;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;


public class Util extends BaseBean {
	public static String SAP_CLIENT="SAPConn800";
	public static String RETURN_MESSAGE_FLAG="true";

	/**
	 * 解决restTemplate调用乱码
	 * @param restTemplate
	 */
	public static void reInitMessageConverter(RestTemplate restTemplate){
		List<HttpMessageConverter<?>> converterList=restTemplate.getMessageConverters();
		HttpMessageConverter<?> converterTarget = null;
		for (HttpMessageConverter<?> item : converterList) {
			if (item.getClass() == StringHttpMessageConverter.class) {
				converterTarget = item;
				break;
			}
		}

		if (converterTarget != null) {
			converterList.remove(converterTarget);
		}
		HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
		converterList.add(converter);
	}




	public static int getIntValue(String str) {
		if ("".equals(Util.null2String(str))) {
			return 0;
		} else {
			return Integer.parseInt(str);
		}
	}

	public static double getDoubleValue(String str) {
		if ("".equals(Util.null2String(str))) {
			return 0.0;
		} else {
			return Double.parseDouble(str);
		}
	}

	/**
	 * 删除0
	 * @param str
	 * @return
	 */
	public static String delFirstZero(String str) {
		String tmp_Str = str.replaceFirst("^0*", "");
		return tmp_Str;
	}

	public static String null2String(Object obj) {
		return obj == null ? "" : (String) obj;
	}

	public static String lpad(String str, int i) {
		while (str.length() < i) {
			str = "0" + str;
		}
		return str;
	}

	public static String rpad(String str, int i) {
		while (str.length() < i) {
			str = str + "0";
		}
		return str;
	}

	public static boolean isNumber(String str) {
		Pattern pattern = Pattern.compile("[0-9]*");
		return pattern.matcher(str).matches();
	}
	/**
	 * List集合转json
	 * @param
	 * @param
	 * @return
	 */
	public static String toJSON(ArrayList list) {
		JSONArray obj = JSONArray.parseArray(JSON.toJSONString(list));
		return obj.toString();
	}

	/**
	 * Map集合转json
	 * @param map
	 * @return
	 */
	public static String toJSON(Map map) {
		JSONObject obj = JSONObject.parseObject(JSON.toJSONString(map));
		return obj.toString();
	}


	public static String dateAdd(String date, int num) {
		String tmp_date = "";
		String tmp_fmt = "yyyy-MM-dd";
		tmp_fmt = (date.length() == 8) ? "yyyyMMdd" : tmp_fmt;
		Calendar cal = Calendar.getInstance();
		try {
			cal.setTime(new SimpleDateFormat(tmp_fmt).parse(date));
			cal.add(Calendar.DATE, num);
			tmp_date = new SimpleDateFormat(tmp_fmt).format(cal.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return tmp_date;
	}

	/**
	 * 1 年月日，2 年月，3年，4月，5 日，6年月日时分秒，7年月日,8年.月.日,9月
	 */
	public static String getNowDate(String i) {
		Date date = new Date();
		return Util.getDate(date, i);
	}

	/**
	 * 1 年月日，2 年月，3年，4月，5 日，6年月日时分秒，7年月日,8年.月.日,9月
	 */
	public static String getDate(String dateStr, String i) {
		DateFormat df = null;
		if (dateStr.length() == 8) {
			df = new SimpleDateFormat("yyyyMMdd");
		} else if (dateStr.length() == 10) {
			df = new SimpleDateFormat("yyyy-MM-dd");
		} else if (dateStr.length() == 16) {
			df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		} else if (dateStr.length() == 19) {
			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		}
		Date date=null;
		try {
			date = df.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return Util.getDate(date, i);
	}

	/**
	 * 1 年-月-日，2 年月，3年，4月，5 日，6年-月-日时分秒，7年月日,8年.月.日,9月
	 */
	public static String getDate(Date date, String i) {
		String tmp_date = "";
		DateFormat df = null;
		if ("1".equals(i)) {
			df = new SimpleDateFormat("yyyy-MM-dd");
			tmp_date = df.format(date);
		} else if ("2".equals(i)) {
			df = new SimpleDateFormat("yyyy-MM");
			tmp_date = df.format(date);
		} else if ("3".equals(i)) {
			df = new SimpleDateFormat("yyyy");
			tmp_date = df.format(date);
		} else if ("4".equals(i)) {
			df = new SimpleDateFormat("MM");
			tmp_date = df.format(date);
		} else if ("5".equals(i)) {
			df = new SimpleDateFormat("dd");
			tmp_date = df.format(date);
		} else if ("6".equals(i)) {
			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			tmp_date = df.format(date);
		} else if ("7".equals(i)) {
			df = new SimpleDateFormat("yyyyMMdd");
			tmp_date = df.format(date);
		} else if ("8".equals(i)) {
			df = new SimpleDateFormat("yyyy.MM.dd");
			tmp_date = df.format(date);
		} else if ("9".equals(i)) {
			df = new SimpleDateFormat("M");
			tmp_date = df.format(date);
		}
		return Util.null2String(tmp_date);
	}
	     //得到MAP值，不返回null;
		public static String V(Map<String, String> v_map,String v_key){
			return Util.getMapVal(v_map, v_key);
		}
	     //得到MAP值，不返回null;
		public static String getMapVal(Map<String, String> v_map,String v_key){
			String v_restr="";
			if(v_map.containsKey(v_key)){
				v_restr=v_map.get(v_key);
			}
			return v_restr;
		}
		public static String V(Map<String, Map<String, String>> v_map,String v_row,String v_col){
			return Util.getMapVal(v_map,v_row,v_col);
		}
	     //得到MAP值，不返回null;
		public static String getMapVal(Map<String, Map<String, String>> v_map,String v_row,String v_col){
			String v_restr="";
			if(v_map.containsKey(v_row)&&v_map.get(v_row).containsKey(v_col)){
				v_restr=v_map.get(v_row).get(v_col);
			}
			return v_restr;
		}


	/**
	 * 获取汉字串拼音首字母，英文字符不变
	 *
	 * @param chinese
	 *            汉字串
	 * @return 汉语拼音首字母
	 */
	/*public static String getFirstSpell(String chinese) {
		StringBuffer pybf = new StringBuffer();
		char[] arr = chinese.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > 128) {
				try {
					String[] temp = PinyinHelper.toHanyuPinyinStringArray(
							arr[i], defaultFormat);
					if (temp != null) {
						pybf.append(temp[0].charAt(0));
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pybf.append(arr[i]);
			}
		}
		return Util.null2String(pybf.toString().replaceAll("\\W", "").trim());
	}*/
	/**
	 * 获取汉字串拼音首字母，英文字符不变
	 *
	 * @param chinese
	 *            汉字串
	 * @return 汉语拼音首字母
	 */

	/*public static String getAllSpell(String chinese) {
		StringBuffer pybf = new StringBuffer();
		char[] arr = chinese.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > 128) {
				try {
					String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
					if (temp != null) {
						String tmp_str=Util.null2String(temp[0]);
						if(pybf.length()>0){
							tmp_str=tmp_str.substring(0, 1);
						}
						pybf.append(tmp_str);
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pybf.append(arr[i]);
			}
		}
		return Util.null2String(pybf.toString().replaceAll("\\W", "").trim());
	}*/
}
